最后更新时间:2020年12月15日
功能描述
完整意义上的地图导航,包括两部分,一是路线规划,二是路径引导(导航)。只有规划出路线之后,才能进行路径引导。
路径规划,即通过起点、途经点、终点以及偏好设置,基于导航数据分析计算,规划出想要的最佳路径。MapGIS Mobile for Android SDK导航模块提供的功能接口,支持针对不同的路线规划需求,如距离最短、时间最快、费用最低等多偏好设置;多个途经点和避让区的设置;跨楼层的室内路径计算,以及室内外一体化的路径计算。不同需求采用不同接口,来满足实际应用中的各种需求。
主要通过API程序包com.zondy.mapgis.route下的路径规划类RouteAnalysis的接口实现:
接口 | 说明 |
---|---|
init() | 路径分析对象初始化 |
calculationRoute() | 路径计算 |
实现方法
路径规划功能实现的一般流程如下图所示:
1
RouteAnalysis routeAnalysis = new RouteAnalysis();
2
通过室内外导航数据路径,初始化路径分析对象。
//获取室外、室内导航数据的存储路径 String mOutdoorNaviDB = Environment.getExternalStorageDirectory().getPath() + "/MapGIS Sample/Navigation/outdoor/WuhanNavi.db"; String mIndoorNaviDB = Environment.getExternalStorageDirectory().getPath() + "/MapGIS Sample/Navigation/indoor"; //初始化路径分析对象,为路径规划对象设置导航数据路径(参数1:室外导航数据文件路径;参数2:室内导航数据目录) routeAnalysis.init(mOutdoorNaviDB, mIndoorNaviDB);
3
确定导航的出发地、途经点、目的地,可通过GPS定位功能获取设备当前定位点作为起点,也可通过POI搜索获取,或者通过用户手势交互选点获取;起点、途经点、终点可用图像GraphicImage方式绘制显示在地图上。
//确定路径规划的起点、终点,需要的话可以设置中间点。 Dot mStartPoint=new Dot(12735810,3563516); //起点 Dot mWayPoint1=new Dot(12725802,3571690); //途经点,可有多个 Dot mEndPoint=new Dot(12737650,3581877); //终点 //创建路径点数组对象 WayPoint[] wayPoints = new WayPoint[3]; //从起点到终点按顺序存储 wayPoints[0] = new WayPoint(mStartPoint); wayPoints[1] = new WayPoint(mWayPoint1); wayPoints[2] = new WayPoint(mEndPoint);
重要说明:在构造路径点WayPoint对象时,室内、室外路径点的构造方式不一样:
wayPoints[0] = new WayPoint(mStartPoint);
//构造WayPoint路径点对象,楼层为9层,楼栋为598号。 wayPoints[0] = new WayPoint(mStartPoint, 8, 598); //-1为负一层,0为1层,1为二层,以此类推
4
在准备工作完成后,使用室内外一体化路径规划接口calculationRoute()计算路径。如下:设置目标行进的方向、室外算路模式为距离最短、室内算路模式室内优先电梯、不设置规避区、不设置车牌号。
//计算路径,返回Route集合 List<Route> routeList = routeAnalysis.calculationRoute(-1.0f, wayPoints, RouteAnalysis.DrivingLeastDistance, RouteAnalysis.RouteModeIndoorPreferElevator, null, null);
calculationRoute接口具体说明如下,可通过各种参数的设置来实现特定的功能。
接口 | 说明 |
---|---|
calculationRoute(float angle, WayPoint[] wayPoints, int naviMode, int naviModeIndoor, com.zondy.mapgis.core.geometry.Rect[] avoidRegions, java.lang.String plateNO)) 参数:定位目标行进的方向、路径点、室外道路算路模式、室内道路算路模式、规避区域、车牌号 |
路径计算 |
SDK提供了多种算路模式,可以根据个人偏好,设置不同参数来得到不同的导航路线:室外导航可以选择步行或者驾车;驾车的话可以选择距离最短、用时最少或者最省钱的路线;室内导航可以选择优先电梯或者优先楼梯的路线。如下表所示,各种算路模式对应com.zondy.mapgis.core.route.RouteAnalysis类中的字段常量。算路模式的实现必须有相应的数据支持。
算路模式 | 算路模式参数 | |
---|---|---|
室外 | 驾车最短距离 | DrivingLeastDistance |
驾车时间最短 | DrivingLeastTime | |
驾车最省钱 | DrivingSaveMoney | |
步行 | WalkDefault | |
室内 | 室内优先电梯 | RouteModeIndoorPreferElevator |
室内优先自动扶梯 | RouteModeIndoorPreferEscalator | |
室内优先楼梯 | RouteModeIndoorPreferStairs |
5
路径规划成功后,得到路径,通过获取Route路线对象获取信息,如路线坐标点、路段描述、路段数目、路径外包矩形等。最重要的是路线的绘制,可通过纹理线绘制功能将路线的坐标点绘制成线展示在地图上。
//获取计算得到的第一条路径 Route mRoute = routeList.get(0); Rect routeRect = mRoute.getBoundingRect(); //1、获取路径外包矩形,可用于将地图缩放到此范围 int segCount = mRoute.getStepCount(); //2、获取路段数目 String overViewString = mRoute.getOverview(); //3、获取路径描述 Dot[] coorDots = mRoute.getCoors(); //4、获取路径坐标,用于路线的绘制显示 //路线绘制:绘制纹理线 GraphicPolylin routeLine = new GraphicPolylin(coorDots); //创建线图形对象 Bitmap bitMap = BitmapCreator.fromAsset(this, "ico_texture_line.png"); //位图对象 routeLine.setFillTexture(bitMap); //设置填充纹理 routeLine.setLineWidth(bitMap.getHeight()); //设置线宽 mapView.getGraphicsOverlay().addGraphic(routeLine); //绘制 mapView.refresh(); //刷新
提示:导航数据为何种空间参考系,得到的路线坐标也是相同的坐标系,如果和显示地图的参考系不匹配,则需要转换。例如,如果导航数据为经纬度坐标,地图为Web墨卡托坐标系,获取路径坐标之后,需将其坐标点转换,才能正常显示在地图上。